home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / HTML / Menu / SigmaRenderer.php < prev    next >
PHP Script  |  2004-03-24  |  5KB  |  129 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2003 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Author:  Alexey Borzov <avb@php.net>                                 |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: SigmaRenderer.php,v 1.2 2004/01/18 17:35:52 avb Exp $
  20. //
  21.  
  22. require_once 'HTML/Menu/Renderer.php';
  23.  
  24. /**
  25.  * The renderer that uses HTML_Template_Sigma instance for menu output.
  26.  * 
  27.  * @version  $Revision: 1.2 $
  28.  * @author   Alexey Borzov <avb@php.net>
  29.  * @access   public
  30.  * @package  HTML_Menu
  31.  */
  32. class HTML_Menu_SigmaRenderer extends HTML_Menu_Renderer
  33. {
  34.    /**
  35.     * Template object used for output
  36.     * @var object HTML_Template_Sigma
  37.     */
  38.     var $_tpl;
  39.  
  40.    /**
  41.     * Mapping from HTML_MENU_ENTRY_* constants to template block names
  42.     * @var array
  43.     */
  44.     var $_typeNames = array(
  45.         HTML_MENU_ENTRY_INACTIVE    => 'inactive',
  46.         HTML_MENU_ENTRY_ACTIVE      => 'active',
  47.         HTML_MENU_ENTRY_ACTIVEPATH  => 'activepath',
  48.         HTML_MENU_ENTRY_PREVIOUS    => 'previous',
  49.         HTML_MENU_ENTRY_NEXT        => 'next',
  50.         HTML_MENU_ENTRY_UPPER       => 'upper',
  51.         HTML_MENU_ENTRY_BREADCRUMB  => 'breadcrumb'
  52.     );
  53.  
  54.    /**
  55.     * Prefix for template blocks and placeholders
  56.     * @var string
  57.     */
  58.     var $_prefix;
  59.  
  60.    /**
  61.     * Class constructor.
  62.     * 
  63.     * Sets the template object to use and sets prefix for template blocks
  64.     * and placeholders. We use prefix to avoid name collisions with existing 
  65.     * template blocks and it is customisable to allow output of several menus 
  66.     * into one template.
  67.     *
  68.     * @access public
  69.     * @param  object HTML_Template_Sigma    template object to use for output
  70.     * @param  string    prefix for template blocks and placeholders
  71.     */
  72.     function HTML_Menu_SigmaRenderer(&$tpl, $prefix = 'mu_')
  73.     {
  74.         $this->_tpl    =& $tpl;
  75.         $this->_prefix =  $prefix;
  76.     }
  77.  
  78.     function finishMenu($level)
  79.     {
  80.         if ('rows' == $this->_menuType && $this->_tpl->blockExists($this->_prefix . ($level + 1) . '_menu_loop')) {
  81.             $this->_tpl->parse($this->_prefix . ($level + 1) . '_menu_loop');
  82.         } elseif ($this->_tpl->blockExists($this->_prefix . 'menu_loop')) {
  83.             $this->_tpl->parse($this->_prefix . 'menu_loop');
  84.         }
  85.     }
  86.     
  87.     function finishRow($level)
  88.     {
  89.         if ('rows' == $this->_menuType && $this->_tpl->blockExists($this->_prefix . ($level + 1) . '_row_loop')) {
  90.             $this->_tpl->parse($this->_prefix . ($level + 1) . '_row_loop');
  91.         } elseif ($this->_tpl->blockExists($this->_prefix . 'row_loop')) {
  92.             $this->_tpl->parse($this->_prefix . 'row_loop');
  93.         }
  94.     }
  95.  
  96.     function renderEntry($node, $level, $type)
  97.     {
  98.         if (in_array($this->_menuType, array('tree', 'sitemap', 'rows'))
  99.             && $this->_tpl->blockExists($this->_prefix . ($level + 1) . '_' . $this->_typeNames[$type])) {
  100.  
  101.             $blockName = $this->_prefix . ($level + 1) . '_' . $this->_typeNames[$type];
  102.         } else {
  103.             $blockName = $this->_prefix . $this->_typeNames[$type];
  104.         }
  105.         if (('tree' == $this->_menuType || 'sitemap' == $this->_menuType) &&
  106.              $this->_tpl->blockExists($blockName . '_indent')) {
  107.  
  108.             for ($i = 0; $i < $level; $i++) {
  109.                 $this->_tpl->touchBlock($blockName . '_indent');
  110.                 $this->_tpl->parse($blockName . '_indent');
  111.             }
  112.         }
  113.         foreach ($node as $k => $v) {
  114.             if ('sub' != $k && $this->_tpl->placeholderExists($this->_prefix . $k, $blockName)) {
  115.                 $this->_tpl->setVariable($this->_prefix . $k, $v);
  116.             }
  117.         }
  118.         $this->_tpl->parse($blockName);
  119.         if ('rows' == $this->_menuType 
  120.             && $this->_tpl->blockExists($this->_prefix . ($level + 1) . '_entry_loop')) {
  121.             
  122.             $this->_tpl->parse($this->_prefix . ($level + 1) . '_entry_loop');
  123.         } else {
  124.             $this->_tpl->parse($this->_prefix . 'entry_loop');
  125.         }
  126.     }
  127. }
  128. ?>
  129.